package com.embeddings.qwen;

import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;

public class Main {

    public static GenerationResult callWithMessage(String model, String apiKey, String query, String content) throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();

        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("你是一个无痕晾衣架产品的直播间在线销售客服小乐，你有10年在线客服工作经验，必须严格按照知识库检索的内容做最精简的回答，只回答关键信息。" +
                        "对于用户问题中可能出现的同音不同意错别字，你要根据读音、语义和语境多维度识别并匹配知识库中的正确信息。" +
                        "当所有知识库内容都与产品问题无关时，或者知识库检索到任何相关信息时，你的回答必须是“404”这句话。" +
                        "你只对知识库检索的知识，找出其中最相关的信息做精简回答，坚决杜绝胡编乱造，对于产品的关键参数要严格按照知识库数据回复，不能有误差，注意数字。" +
                        "对于组合问题，先单个组织语言，然后再组合回答。问候语可以相应的礼貌回复！\n" +
                        "        以下是知识库：\n" +
                        "        {" + content + "}\n" +
                        "        以上是知识库。")
                .build();

        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content(query)
                .build();

        GenerationParam param = GenerationParam.builder()
                .model(model)
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .apiKey(apiKey)
                .topK(50)
                .temperature(0.1f)
                .topP(0.8)
                .seed(1234)
                .build();

        return gen.call(param);
    }
}